import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.junit.platform.suite.api.Suite;

import java.util.stream.Stream;

/**
 * @author starsea
 * @date 2024-08-12 9:07
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {
    public static Stream<Arguments> ways1() {
        return Stream.of(Arguments.arguments("张三", 13), Arguments.arguments("lisi", 14));
    }
    //@BeforeAll
    //public static void start() {
    //    System.out.println("==========开始测试==========");
    //}

    @Order(2)
    @Test
    public void test01() {
        System.out.println("==========测试1==========");
    }
    //1.指定执行测试用例的执行

    @Order(1)
    @Test

    public void test02() {

        System.out.println("==========测试2==========");
    }

    //@BeforeEach
    //public void beforEachTest() {
    //    System.out.println("==========一条测试开始==========");
    //}

    //2.单参数-->只能接受一种类型的参数，并且只能接受一个参数
    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3, 4, 5})
    public void test03(int x) {
        System.out.println("传入的参数是：" + x);

        System.out.println("==========测试2==========");
    }

    //3.多参数
    //@Test-->如果写了test代码会执行两遍，其中一次就会报错，test和方法结合，没有中到参数，所以会报错
    @ParameterizedTest
    @CsvSource({"'张三',18", "'李四',19"})
    public void test03(String name, Integer age) {
        System.out.println("传入的姓名是：" + name + "他的年龄是:" + age);

        System.out.println("==========测试2==========");
    }

    //4.多参数读取某一个文件
    @ParameterizedTest
    @CsvFileSource(resources = "test01.csv")
    public void test04(String name, Integer age) {
        System.out.println("传入的姓名是：" + name + "他的年龄是:" + age);

        System.out.println("==========测试2==========");
    }

    //5.通过方法注册得到测试数据
    @ParameterizedTest
    @MethodSource("ways1")
    public void test05(String name, Integer age) {
        System.out.println("传入的姓名是：" + name + "他的年龄是:" + age);

        System.out.println("==========测试2==========");
    }
    //测试套件
    //@Suite
    //@AfterEach
    //public void afterEachTest() {
    //    System.out.println("==========一条测试结束==========");
    //}
    //
    //@AfterAll
    //public static void end() {
    //    System.out.println("==========结束测试==========");
    //}


}
